package uy.com.antel.dao;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import uy.com.antel.entity.Editorial;
import uy.com.antel.entity.Libro;
import uy.com.antel.entity.Publicacion;

@Stateless
public class PublicacionDAO implements PublicacionDAOLocal {
	
	 @PersistenceContext(unitName="pruebaJEE")
	    private EntityManager em;


	@Override
	public boolean persistPublicacion(Publicacion pub, Editorial edit) {
		boolean flag=true;
		if (edit.getPub()== null) {edit.getPub().add(pub);
		 em.merge(edit);
		 flag=false;}
		List<Publicacion> lista = edit.getPub();
		
		if (edit.getPub() != null){
		lista = edit.getPub();
	
		for (Publicacion publicacion : lista) {
			
			Libro l =(Libro)publicacion;
			Libro l1 =(Libro)pub;
			if (l.getISBN().equals(l1.getISBN()) ){ flag=false;System.out.println("YA EXISTE LIBRO CON ESE ISBN"); }
			if (l.getTitulo().equals(l1.getTitulo())){ flag=false;System.out.println("YA EXISTE LIBRO CON ESE NOMBRE");}
			}
			if (flag ){
			edit.getPub().add(pub);
			 em.merge(edit);
			}
			
		}
		
		 return true;
	}

	@Override
	public Publicacion findPublicacion(String nombre) {
		Publicacion e = em.find(Publicacion.class, nombre);		
		return e;
	}
	@Override
	public void removePublicacion(Publicacion pub) {
		pub = em.find(Publicacion.class, pub.getTitulo());
	        em.remove(pub);
}
	@Override
	public List<Publicacion> listado(Editorial edit) {
		return edit.getPub();
	}

	@Override
	public Publicacion findPublicacionxISBN(String isbn) {
		Publicacion e;
		Query q = em.createQuery("SELECT u FROM Publicacion u WHERE u.ISBN = :ISBN");
		q.setParameter("ISBN", isbn);
		try	{				
			e = (Publicacion) q.getSingleResult();			}
		catch(NoResultException ex)
		{	return null;}
		return e;		
	}

	@Override
	public boolean existPublicacion(String isbn) {
		Query query = em.createQuery("select u from Publicacion u where u.ISBN = :ISBN");
		query.setParameter("ISBN" ,isbn );
		return ((query.getResultList() != null) && (query.getResultList().size() > 0)); 
	}
}

	

